package com.leetCode.ListNodeDemo;

import java.util.ArrayList;
import java.util.List;

public class MiddleNodeDemo {
    public static void main(String[] args) {
        ListNode listNode = new ListNode(1,new ListNode(2,new ListNode(3,new ListNode(4,new ListNode(5,new ListNode(6))))));
        System.out.println(middleNode1(listNode).val);
    }

    /**
     *给你单链表的头结点 head ，请你找出并返回链表的中间结点。
     *
     * 如果有两个中间结点，则返回第二个中间结点。
     *
     *
     *
     * 示例 1：
     *
     *
     * 输入：head = [1,2,3,4,5]
     * 输出：[3,4,5]
     * 解释：链表只有一个中间结点，值为 3 。
     * 示例 2：
     *
     *
     * 输入：head = [1,2,3,4,5,6]
     * 输出：[4,5,6]
     * 解释：该链表有两个中间结点，值分别为 3 和 4 ，返回第二个结点。
     */
    public static ListNode middleNode(ListNode head) {
        List<ListNode> list = new ArrayList<>();
        ListNode temp = head;
        while (temp != null){
            list.add(temp);
            temp = temp.next;
        }
        return list.get(list.size() / 2);
    }

    public static ListNode middleNode1(ListNode head) {
        int count = 0;
        ListNode temp = head;
        while (temp != null){
            count++;
            temp = temp.next;
        }
        int mid = count / 2;
        ListNode temp1 = head;
        while (mid > 0){
            mid--;
            temp1 = temp1.next;
        }
        return temp1;
    }
}
